package com.example.gulimall.cart.controller;

import com.example.gulimall.cart.interceptor.CartInterceptor;
import com.example.gulimall.cart.service.CartService;
import com.example.gulimall.cart.to.UserInfoTo;
import com.example.gulimall.cart.vo.CartItemVo;
import com.example.gulimall.cart.vo.CartVo;
import org.apache.tomcat.util.descriptor.web.LoginConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import com.example.common.constant.AuthServerConstant;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.concurrent.ExecutionException;

@Controller
public class CartController {
    /**
     * 去购物车页面吗
     * 京东做法 浏览器有一个cookie user-key 标识用户身份过分，这个cookie的有效时间是一个月
     * 而且第一次访问京东的购物车功能，都会给用户一个临时身份
     * 浏览器以后保存，每次访问都会带上这个cookie
     *
     * 登录：session有身份信息
     * 没登陆：按照cookie里面带来的user_key来做，第一次，如果没有临时用户，帮忙创建一个临时用户
     * 拦截器实现改功能
     * ThreaLocal 同一个线程共享数据
     * @return
     */
    @Autowired
    CartService cartService;
    @GetMapping("/cart.html")
    public String cartListPage(Model model) throws ExecutionException, InterruptedException {
        //1 通过ThreaLocal同一个线程贡献数据，拿到在拦截器中放入的用户信息，id,user-key
//        UserInfoTo userInfoTo = CartInterceptor.threadLocal.get();
//
//        System.out.println(userInfoTo);
        CartVo cartVo= cartService.getCart();
        model.addAttribute("cart",cartVo);
        return "cartList";
    }
    @GetMapping("/checkItem")
    public String checkItem(@RequestParam("skuId") Long skuId,@RequestParam("check") Integer check){
        cartService.checkItem(skuId,check);
        return  "redirect:http://cart.mall.com/cart.html";
    }
    @GetMapping("/countItem")
    public String countItem(@RequestParam("skuId") Long skuId,@RequestParam("num") Integer num){
        cartService.countItem(skuId,num);
        return  "redirect:http://cart.mall.com/cart.html";
    }

    /**
     * 删除某个购物项
     * @param skuId
     * @return
     */
    @GetMapping("/deleteItem")
    public String deleteItem(@RequestParam("skuId") Long skuId){
        cartService.deleteItem(skuId);
        return  "redirect:http://cart.mall.com/cart.html";
    }

    /**
     *  redirectAttributes.addFlashAttribute(),将数据放在session中，数据只能取一次
     *  redirectAttributes.addAttribute，将数据放在url后面
     * @param skuId
     * @param num
     * @param redirectAttributes
     * @return
     * @throws ExecutionException
     * @throws InterruptedException
     */
    @GetMapping("addToCart")
    public  String addToCart(@RequestParam("skuId")Long skuId,
                             @RequestParam("num") Integer num, RedirectAttributes redirectAttributes) throws ExecutionException, InterruptedException {
        cartService.addToCart(skuId,num);

        redirectAttributes.addAttribute("skuId",skuId);
       //防止浏览器刷新重复提交添加购物车
        return  "redirect:http://cart.mall.com/addToCartSuccessPage.html";
    }
    @GetMapping("/addToCartSuccessPage.html")
    public String addToCartSuccessPage(@RequestParam("skuId") Long skuId,Model model){
        //重定向到成功页面，再次查询购物车数据即可
       CartItemVo itemVo= cartService.getCartItem(skuId);
       model.addAttribute("item",itemVo);
        return  "success";
    }
    @GetMapping("/currentUserCartItems")
    @ResponseBody
    public List<CartItemVo> getCurrentUserCartItems(){

        return cartService.getUserCartItems();
    }
}
